关于 eMMC 物理分区

  • 润物细无声
  • 2024-04-08 23:50
  • 不管 MBR (Master Boot Record) 和 GPT (GUID Partition Table) 分区都是 '软' 分区,是软件约定,而实际物理上是一块。之前学习 AtomicPi-CA1 (RK3568) 引导时,偶然发现 eMMC 竟然是物理分区。遂,记录一下。我看到的是 CSDN 上转载的,而原文的新浪博客,这时已经关闭了。

    eMMC 的分区有一些是不能修改的(如 BOOT1、BOOT2 和 RPMB 分区),有一些是可以通过特定的命令和寄存器就可以修改的(如 Enhanced Partition 和 GPAP)。参考 eMMC分区详解

    通常,从厂家出来的eMMC 主要由这几个部分组成:

    1. BOOT Area Partition 1 & BOOT Area Partition 2
    2. RPMB (Replay Protected Memory)
    3. UDA (User Data Area)
    4. Vender private area

    前 3 项是软件可以通过配置寄存器进行读写的,并且 UDA 还可以进行分区配置。

    1. BOOT1 & BOOT2

    这两个分区是由厂家在生产过程中配置好了的,并且其大小是不能由软件进行配置的。

    Boot 1 和 Boot 2 这两个区域在存储的稳定性、可靠性及擦除次数上都远比 UDA 要好,所以很多 chipset 上都会使用这两个区域来存放一下关键数据,如 boot image,default 配置参数等等。当然,不同的 chipset 的配置方法也不尽相同。这个可以找 chipset 的工程师询问。

    2. RPMB

    它的存在目的是用来给系统存放一些特殊的、需要进行访问授权的数据。据原作者所知,目前大陆的手机及平板厂商还没有一家使用到此区域的。

    3. UDA

    就是软件可以进行读写存储的区域,通常其大小为整块 eMMC 表示大小的 93% 左右,即 4GB 的 eMMC UDA 区域只有 4GB*93%=3809MB。

    之前说的 BOOT1&2、RPMB 和 UDA 区域我们都可以认为它们在物理上是独立的(当然都是存在于同一块 die 上),即它们各自的物理起始地址都是 0x0 ,这个在出厂的时候就会设置完成。下面我们就来说两种可以在物理上进行独立分区的方式:

    eMMC 的 spec 上定义每个 eMMC 最多可以通过配置寄存器来定义 4 个 GPAP。

    GPAP 配置定义完成之后每一个 GPAP 的起始地址都为 0x0,即可以相应地将其认为是独立的一块区域。只是在存放数据的时候会需要重新根据它的起始地址进行计算然后再存储数据。这样必然会增加一定的工作量。据原笔者所知,目前大陆的手机及平板几乎没有用到这个功能。都是使用一整块的 UDA,然后通过文件系统去进行逻辑上的分区使用。

    我想肯定会有读者想问那这个功能到底有什么用呢?我想说 eMMC 是一个通用的存储设备,并不止是为手机和平板使用。当一个设备有多个 CPU 的时候并且它们的功能还不同时,这个时候使用 GPAP 这个功能就非常方便了。

    这也是一个在手机及平板上使用较少的功能。为什么通过配置原本的 UDA 就可以变成 “Enhanced” 的呢?既然这么有用,为什么不将整个 UDA 配置成为 ”Enhanced” 的呢?别着急,我来一一作答。

    我们知道 eMMC 只是指它的接口标准,而它真正的存储介质还是 NAND Flash, 而 NAND 又分为 SLC、MLC 和 TLC,它们的稳定性、可靠性和擦除次数又有很大区别,当然中国厂商最关心的成本也相差很大;目前市场上主流的 eMMC 还是以 MLC 的 NAND 存储介质为主,而 TLC 的 eMMC 也在逐渐的增加。其中以 Samsung 的 TLC 的 eMMC 最为成熟市占率也最高。

    我们这里先以 MLC 的 EMMC 来进行介绍:

    以现在市面上最先进的 NAND 制程 20nm 的 MLC 为例,擦除次数大概在 3000~5000cycle。而 SLC 的擦除次数则在 25000~40000cycle。很明显 SLC 要比 MLC 性能更好,数据存储更稳定。

    而我们这里介绍的 Enhanced Partition 的主要功能就是将 MLC 配置成为 SLC。现在大家明白它为什么被称之为 “Enhanced” 的了!是相对于 MLC(也就是 default storage media)来说的。

    当然,从 MLC 配置为 SLC 不是没有代价的,这个代价自然就是容量变小,会变多小呢?容量只有原来的一半!!!原本1GB的 MLC 通过配置成 SLC 就只剩下 512MB 了,你说谁会愿意这样去大容量地转换呢?

    据笔者所知,目前使用过这个功能的就只有台湾的 HTC,它们是用来存储 boot data。另外,大陆也有一家大厂正在尝试使用 Enhanced Partition 来做为 swap 虚拟内存使用。

    不是所有厂家的 eMMC 都支持 Enhanced Partition 这个功能,但是只要这个 eMMC 是支持这个功能的那么它的 BOOT Area 和 RPMB 就必须是 Enhanced storage media。

    4. Vender Private Area

    在 eMMC 里面除了软件能操作(即可识别并且可以通过地址进行访问)的 boot 1&2、RPMB 和 UDA 之外,其实还有一小部分区域是软件看不见也不能进行操作的。这部分区域是由生产厂家预留的,它主要是用来存放这样一些内容:

    © 2022-2024 留校察看 liuxocakn 保留所有权利 All Rights Reserved
    蜀ICP证2022022862号-1 川公网安备51010702003077号

    自 2024-04-23 22:54 之后访问量: 66342